package net.zoneland.knowledge.service;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import net.zoneland.knowledge.model.LoginUserPojo;
import net.zoneland.knowledge.model.MeetingQr;
import net.zoneland.knowledge.model.MeetingSignIn;
import net.zoneland.knowledge.model.ResponseResult;
import org.springframework.web.multipart.MultipartFile;

/**
 * 会议签到业务接口.
 * @author chw.
 * @version V1.0
 * 2022-11-18
 */
public interface MeetingSignInService  {

    /**
     * 根据用户id和会议id查询该用户签到情况.
     * @param meetingId 会议id
     * @param signInUserId 用户id
     * @return 签到情况
     */
    MeetingSignIn queryIndividualSignIn(final String meetingId, final String signInUserId);

    /**
     * 保存用户会议签到信息.
     * @param meetingSignIn 会议签到信息.
     * @return 操作结果
     */
    int insert(final MeetingSignIn meetingSignIn);

    /**
     * 用户会议签到.
     * @param id 会议id
     * @param user 登录用户
     * @return 签到信息
     */
    ResponseResult doSignIn(final String id, final LoginUserPojo user);

    /**
     * 根据用户获取会议信息.
     * 已过会议结束时间的不显示
     * @param userID 用户uid
     * @return 会议信息
     */
    List<MeetingQr> findNotFinishMeetingDateByUserId(String userID);


    /**
     * 根据oaId查询我参加的会议
     * @param meetingSignIn 会议签到实体类.
     * @return 会议签到集合
     */
    List<MeetingQr> queryJoinMeetingByOaId(final MeetingSignIn meetingSignIn);

    /**
     * 保存excel导入.
     *
     * @param meetingSignIn
     * @return
     */
    void save(final Map<String, String> meetingSignIn, final String meetingId);

    /**
     * 验证并填充数据：
     * 1.验证必填项
     * 2.验证导入人员是否在党员表中存在
     * @param excelDatas
     * @return 验证数据，不为空说明数据有问题
     */
    String checkAndFillData(final List<Map<String, String>> excelDatas);

    /**
     * 根据会议id查询参会人员详情.
     * @param meetingId 会议id
     * @return
     */
    List<MeetingSignIn> querySignInUserByMeetingId(final String meetingId);

    /**
     * 批量删除
     * @param ids 签到人员id
     */
    int batchDeleteById(final String ids, final String meetingId);

    /**
     * 会议excel导入
     * @param file 文件
     * @param meetingId 会议id
     * @return
     * @throws IOException
     */
    ResponseResult meetingUpload(final MultipartFile file, final String meetingId) throws IOException;
}
